/**
 * \file   tstring.cpp
 * \author Fabian Jesus Machado
 * \date   Septiembre de 2011
 * 
 *  Este archivo es parte del proyecto NPASM, un ensamblador para
 * microcontroladores PIC con sintaxis Intel, desarrollado inicialmente
 * por Fabian Machado (fabianjsm@gmail.com, twitter@fabianjsm).
 *  El codigo fuente esta diponible en el repositorio SVN de Google:
 *      http://npasm.googlecode.com/svn/trunk.
 * 
 */
#include <algorithm>
#include "tstring.h"

/**
 * Constructor de la clase tstring
 */
tstring::tstring()
{
	entradas = 0;
}

/**
 * Destructor de la clase tstring
 */
tstring::~tstring()
{
}

/**
 * Metodo que retorna el valor de la propiedad Entradas
 */
size_t tstring::GetEntradas()
{
	return entradas;
}

/**
 * Recupera un string de la tabla
 */
std::string tstring::GetString(size_t n)
{
	return n<entradas? cadena[n]: "";
}

/**
 * Agrega un string a la tabla
 */
size_t tstring::PutString(std::string s)
{
	cadena.push_back(s);
	if(pos_mem.size()) {
		size_t mm = strlen(cadena[entradas - 1].c_str()) +
			pos_mem[entradas - 1] + 1;
		pos_mem.push_back(mm);
	} else
		pos_mem.push_back(0);
	return entradas++;
}

size_t tstring::GetPosMem(size_t n)
{
	return pos_mem[n];
}

/**
 * Busca un string en la tabla
 */
size_t tstring::FindString(std::string s)
{
	if(entradas) {
		std::vector<std::string, std::allocator<std::string> >
			::iterator p, fin = cadena.end();
		if((p = find(cadena.begin(), fin, s)) != fin)
			return p - cadena.begin();
	}
	return entradas;
}
